package com.example.yxweather.ui.login

import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
import com.example.yxweather.MainActivity
import com.example.yxweather.base.BaseBindingActivity
import com.example.yxweather.bean.LoginRequest
import com.example.yxweather.databinding.AcLoginBinding
import com.example.yxweather.storage.TokenPreferences
import com.example.yxweather.util.RetrofitClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class LoginActivity : BaseBindingActivity<AcLoginBinding>() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 登录按钮绑定点击事件，点了抽后 弹框提示 Toast
        binding.tvLogin.setOnClickListener {
            doLogin()
        }

    }

    fun doLogin() {
        // 获取输入的账号 和 密码
        val username = binding.etUsername.text.toString()
        val password = binding.etPassword.text.toString()
        // 判断账号 和 密码是否为空。空提示用户，阻断代码，不为空，调用接口
        if (username.isEmpty() || password.isEmpty()) {
            Toast.makeText(this, "请输入账号和密码", Toast.LENGTH_SHORT).show()
            return
        }
        // 3. 登录逻辑
        try {
            // 使用协程发起网络请求，避免阻塞主线程
            lifecycleScope.launch {
                // 创建登录请求对象，传入用户名和密码
                val req = LoginRequest(username, password)
                // 在IO线程中执行网络请求（网络请求属于耗时操作，不能在主线程执行）
                val res = withContext(Dispatchers.IO) {
                    RetrofitClient.apiService.login(req)
                }

                // 检查服务器返回的响应码是否为10000（表示登录成功）
                if (res.code == 10000) {
                    // 从响应数据中获取token（用于后续接口的身份验证）
                    val token = res.data?.token
                    // TODO: 持久化存储token（比如保存到SharedPreferences或数据库中）

                    if (token.isNullOrEmpty()) {
                        // 处理token为空的情况
                        Toast.makeText(this@LoginActivity, "登录失败", Toast.LENGTH_SHORT).show()
                        //     return@withContext
                        return@launch
                    }
                    // 持久化存储token
                    TokenPreferences.getInstance(this@LoginActivity).saveToken(token.toString())

                    // 显示登录成功的提示信息
//                    Toast.makeText(this@LoginActivity, token, Toast.LENGTH_SHORT).show()

                    // 登录成功后跳转到主页面，并关闭当前登录页面
                    startActivity(Intent(this@LoginActivity, MainActivity::class.java))
                    finish()
                } else {
                    // 如果响应码不是10000，说明登录失败，提示用户
                    Toast.makeText(
                        this@LoginActivity,
                        "登录失败",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }

        } catch (e: Exception) {
            Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show()
        }


    }

    // 将
    override fun initBinding(layoutInflater: LayoutInflater): AcLoginBinding {
        return AcLoginBinding.inflate(layoutInflater)
    }
}